#include "common.h"

int str_equal(char *s1, char *s2) {
    while(*s1 && *s2) {
        if(*s1 != *s2) {
            return 0;
        }
        s1++;
        s2++;
    }
    return *s1 == *s2;
}

// 向dst开始的内存中填充n个字节的c
// 连续内存即数组、数组即连续内存
void* memset(void *dst, uint32 c, uint32 n) {
    char *p = (char *) dst;
    for(int i = 0; i < n; i++) {
        p[i] = c;
    }
    return dst;
}

// 从src开始的内存中复制n个字节到dst开始的内存中
void* memmove(void *dst, const void *src, uint32 n) {
    const char *s;
    char *d;
    if(n == 0) {
        return dst;
    }
    s = src;
    d = dst;
    if(s < d && s + n > d) {
        // 如果src和dst有重叠，且src在前，则从后往前复制，否则会覆盖
        s += n;
        d += n;
        while(n-- > 0) {
            *--d = *--s;
        }
    } else {
        // 没有重叠，或者src在后，则从前往后复制
        while(n-- > 0) {
            *d++ = *s++;
        }
    }
    return dst;
}